/*
 * Anything: A flexible and easy to use data structure that combines the 
 * characteristics of a list and a hashmap into one data structure.
 * 
 * Based on a paper by Peter Sommerlad and Marcel Rueedi on 
 * 'Do-it-yourself reflection' entered at EuroPLOP 1998.
 * 
 * This library was written completely from scratch and is based only 
 * in spirit on the original Java Anything implementation written by 
 * Andre Weinand/Marcel Rueedi in 1997/99 and enhanced by Stefan Tramm 
 * in 2006.
 * 
 * Copyright (c) 2008 Thomas Marti and others. All rights reserved.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *   http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package any.incubator;

import java.io.Serializable;

//TODO: In welches Package soll UnknownObject??
public class UnknownObject implements Serializable {

	private static final long serialVersionUID = -6292076361633675606L;

	private final String language;
	
	private final String type;
	
	private final String stringRepresentation;
	
	public UnknownObject(Object obj) throws NullPointerException {
		this("Java", obj.getClass().getName(), obj.toString());
	}
	
	public UnknownObject(String language, String type, String stringRepresentation) {
		this.language = language;
		this.type = type;
		this.stringRepresentation = stringRepresentation;
	}

    public String getLanguage() {
	    return language;
    }
	
	public String getType() {
		return type;
	}
	
	public String getStringRepresentation() {
		return stringRepresentation;
	}
	
	@Override
	public String toString() {
		return language + "Object\"" + type + " " + stringRepresentation + "\"";
	}
	
	public static UnknownObject getUnknownObject(Object obj) throws NullPointerException {
		return (obj instanceof UnknownObject ? (UnknownObject)obj : new UnknownObject(obj));
	}
	
	public static void main(String[] args) {
		System.out.println(new UnknownObject(new Thread("Test")));
    }
	
}
